package com.ruicar.afs.cloud.channel.online.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruicar.afs.cloud.channel.common.condition.BaseInfoTypeDTO;
import com.ruicar.afs.cloud.channel.common.condition.StartOrStopDTO;
import com.ruicar.afs.cloud.channel.online.condition.*;
import com.ruicar.afs.cloud.channel.online.entity.ChannelBaseInfoTemp;
import com.ruicar.afs.cloud.channel.online.entity.ChannelQuotaInfoTemp;
import com.ruicar.afs.cloud.channel.online.vo.ChannelBulkEditingQuotaInfoVo;
import com.ruicar.afs.cloud.channel.online.vo.ChannelOnlineInfoVo;
import com.ruicar.afs.cloud.channel.online.vo.ChannelOnlineInterFaceVo;
import com.ruicar.afs.cloud.common.core.util.IResponse;
import com.ruicar.afs.cloud.common.modules.dto.mq.voucher.VoucherFlowInfoDto;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author limingzhi
 * @version 1.0
 * @date 2020/05/19 11:13
 */
public interface ChannelOnlineService extends IService<ChannelBaseInfoTemp> {


    /**
     * 渠道代码自定义生成处理
     *
     * @param keyType
     * @param typeIndex
     * @return
     */
    public String channelCodeSequence(String keyType, String typeIndex);

    /**
     * 多条件分页渠道信息列表
     *
     * @param page
     * @param condition
     * @return
     */
    IPage<ChannelOnlineInfoVo> getChannelInfo(Page page, ChannelOnlineCondition condition);

    /**
     * 多条件分页获取渠道展业
     *
     * @param page
     * @param condition
     * @return
     */
    IPage<List<ChannelOnlineInfoVo>> getAreaListCondition(Page page, ChannelOnlineCondition condition);

    /**
     * 创建账号
     *
     * @param dto
     * @return
     */
    public IResponse createByParentId(ChannelBasicTempCondition dto);

    /**
     * 同步授权区域到进件授权子系统
     *
     * @param condition
     * @return
     */
    public IResponse synchronousAuthRegion(ChannelAuthRegionCondition condition);

    /**
     * 同步数据到案件服务
     *
     * @param vo
     */
    public IResponse synchronousDataToCase(ChannelOnlineInterFaceVo vo);

    /**
     * 渠道额度占用/释放
     *
     * @param temp
     */
    public IResponse limitTakeUpOrLease(ChannelQuotaInfoTemp temp);


    /**
     * 根据channelId获取部门树
     *
     * @param channelId
     * @param parentId
     * @return
     */
    public IResponse getDeptInfo(String channelId, String parentId);
    /**
     * 重置用户密码
     *
     * @param id
     * @return
     */
    public IResponse resetPassword(Long id);

    /**
     * 根据获取用户信息
     *
     * @param condition
     * @return
     */
    public IResponse getUserInfo(ChannelUserCondition condition);

    /**
     * 获取这个合作商下面被停的新车进件
     *
     * @param condition
     * @return
     */
    public IResponse getStopNewApply(ChannelUserCondition condition);

    /**
     * 获取这个合作商下面被停的二手车进件
     *
     * @param condition
     * @return
     */
    public IResponse getStopOldApply(ChannelUserCondition condition);

    /**
     * 获取这个合作商下面被停的新车账户
     *
     * @param condition
     * @return
     */
    public IResponse getStopNewUser(ChannelUserCondition condition);


    /**
     * 获取这个合作商下面被停的二手车账户
     *
     * @param condition
     * @return
     */
    public IResponse getStopOldUser(ChannelUserCondition condition);

    /**
     * 获取所有角色信息
     *
     * @param pageNumber
     * @param pageSize
     * @return
     */
    public IResponse getAllByPage(int pageNumber, int pageSize,String roleType);

    /**
     * 批量修改经纬度范围同步案件服务
     *
     * @param tempList
     * @return
     */
    public IResponse synchronousLlRangeToCase(List<ChannelBaseInfoTemp> tempList);

    /**
     * 批量修改区域经理
     *
     * @param channelOnlineCondition
     * @return
     */
    public IResponse synchronousLlManagerToCase(ChannelOnlineCondition channelOnlineCondition);

    /**  地域树获取合作商信息*/
    IPage<List<ChannelOnlineInfoVo>> getByRegion(Page page, RegionDTO condition,List<String> codes,List<Long> channelIds);

    /**  渠道发展树获取合作商信息*/
    IPage<List<ChannelOnlineInfoVo>> getByDevelop(Page page, DevelopDTO condition,List<Long> ids );

    /**
     * 获取符合我角色的渠道信息
     * @return
     */
    List<ChannelBaseInfoTemp> getRoleChannelList();

    /**
     * 获取我的发展科 角色
     * @return
     */
    BaseInfoTypeDTO getRole();

    /**
     * 根据状态和channlId  去判断查询的条件
     * @param dto
     * @return
     */
    List<ChannelBaseInfoTemp> getBaseInfoByStatus(BaseInfoTypeDTO dto);

    /**
     * 根据状态和channlId  去判断查询的条件  非直营的新车二手车都做，直营的只做一种类型
     * @param dto
     * @return
     */
    List<ChannelBaseInfoTemp> getBaseInfoByStatusOtherAll(BaseInfoTypeDTO dto);

    /**
     * 根据状态和channlId  去判断查询的条件  直营的新车二手车都做，非直营的只做一种类型
     * @param dto
     * @return
     */
    List<ChannelBaseInfoTemp> getBaseInfoByStatusOwnAll(BaseInfoTypeDTO dto);

    /**
     * 根据状态和channlId  去判断查询的条件  直营的新车二手车都做，非直营不行
     * @param dto
     * @return
     */
    List<ChannelBaseInfoTemp> getBaseInfoByStatusOnlyOwnAll(BaseInfoTypeDTO dto);

    /**
     * 根据状态和channlId  去判断查询的条件  直营只做一种类型，非直营不行
     * @param dto
     * @return
     */
    List<ChannelBaseInfoTemp> getBaseInfoByStatusOnlyOwnType(BaseInfoTypeDTO dto);

    /**
     * 根据状态和channlId  去判断查询的条件  非直营的新车二手车都做，直营不行
     * @param dto
     * @return
     */
    List<ChannelBaseInfoTemp> getBaseInfoByStatusOnlyOtherAll(BaseInfoTypeDTO dto);

    /**
     * 根据状态和channlId  去判断查询的条件  非直营只做一种类型，直营不行
     * @param dto
     * @return
     */
    List<ChannelBaseInfoTemp> getBaseInfoByStatusOnlyOtherType(BaseInfoTypeDTO dto);

    /**
     * 根据状态和channlId  去判断查询的条件  非直营是单一类型  直营是单一类型
     * @param dto
     * @return
     */
    List<ChannelBaseInfoTemp> getBaseInfoByStatusOtherOnlyOwnOnly(BaseInfoTypeDTO dto);

    /**
     * 推送流水数据
     * @param dto
     * @return
     */
    IResponse send(VoucherFlowInfoDto dto);

    /**
     * 停新车二手车进件
     * @param condition
     * @return
     */
    public IResponse stopApply(StartOrStopDTO condition);
    /**
     * 启新车二手车进件
     * @param condition
     * @return
     */
    public IResponse startApply(StartOrStopDTO condition);
    /**
     * 停新车二手车账户
     * @param condition
     * @return
     */
    public IResponse stopUser(StartOrStopDTO condition);
    /**
     * 启新车二手车账户
     * @param condition
     * @return
     */
    public IResponse startUser(StartOrStopDTO condition);

    /**
     * 佣金系统同步渠道id Mq
     *
     * @param infoTemp
     * @return
     */
    public JSONObject sendChannelId(ChannelBaseInfoTemp infoTemp);

    List<ChannelBulkEditingQuotaInfoVo> getByConditionForBulkEditing( ChannelOnlineCondition condition);
    /**
     * 获取渠道基本信息列表
     * @param condition
     * @return
     */
    public IResponse getByCondition(ChannelOnlineCondition condition);
}
